home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tt / environ.arc / ENVIRON.S < prev    next >
Text File  |  1991-04-18  |  3KB  |  112 lines

  1.         .text
  2. *housekeeping
  3.         move.l  a7,a5
  4.         move.l  4(a5),a5        ;compute size for TSR call
  5.         move.l  $c(a5),d6       ;text
  6.         add.l   $14(a5),d6      ;data
  7. *       add.l   $1c(a5),d6      ;bss
  8.         add.l   #$100,d6        ;basepage
  9.         add.l   #$40,d6         ;saftey
  10. *open
  11.         move.w  #0,-(sp)
  12.         pea     envfstr
  13.         move.w  #$3d,-(sp)
  14.         trap    #1
  15.         addq.l  #8,sp
  16.         move.w  d0,handl
  17.         blt     bexit
  18. *read
  19.         pea     workar
  20.         move.l  #8192,-(sp)
  21.         move.w  handl,-(sp)
  22.         move.w  #$3f,-(sp)
  23.         trap    #1
  24.         add.l   #12,sp
  25.         add.w   d0,d6           ;length of used BSS = length of file
  26.         move.l  #workar,a0
  27.         add.w   d0,a0           ;point to end of environment
  28.         move.b  #0,(a0)         ;put nulls afterword
  29.         move.b  #0,1(a0)        ;put nulls afterword
  30.  
  31. ;change linefeeds to nulls
  32.         move.l  #workar,a0
  33.         move.w  d0,d1
  34. zaplflp:
  35.         cmp.b   #10,(a0)
  36.         bne.b   notlf            ;was: bne.s          
  37.         move.b  #0,(a0)
  38. notlf:
  39.         addq.l  #1,a0
  40.         dbf     d0,zaplflp
  41. ;remove returns
  42.         move.l  #workar,a0
  43.         move.l  a0,a1
  44. zapcrs:
  45.         cmp.b   #13,(a0)
  46.         bne.b   notcr            ;was: .s
  47.         addq.l  #1,a0
  48.         bra.b   zapcrs           ;was: .s
  49. notcr:
  50.         move.b  (a0)+,(a1)+
  51.         cmp.b   #0,(a0)
  52.         dbeq    d1,zapcrs         
  53.         move.b  #0,(a1)
  54.  
  55.         add.w   #$40,d6         ;safety
  56. *close
  57.         move.w  handl,-(sp)
  58.         move.w  #$3d,-(sp)
  59.         trap    #1
  60.         addq.l  #4,sp
  61.  
  62. * alter vector
  63.         move.l  #doit,-(sp)     ;point to the vector changer code
  64.         move.w  #38,-(sp)       ;we want to do it in supervisor mode!
  65.         trap    #14             ;execute it!
  66.         addq.l  #6,sp
  67. * tell everyone we are here
  68.         pea     msg1
  69.         move.w  #9,-(sp)
  70.         trap    #1
  71.         addq.l  #6,sp
  72. * TSR
  73.         clr     -(sp)           ;exit but stay
  74.         move.l  d6,-(sp)
  75.         move    #$31,-(sp)
  76.         trap    #1
  77.  
  78. bexit:  move    #0,-(sp)
  79.         trap    #1
  80. * set env upon startup
  81. movenv:
  82.         move.l  a7,a5
  83.         move.l  4(a5),a5
  84.         move.l  a5,a4
  85. linkup:
  86.         move.l  $24(a4),a4
  87.         movea.l $2c(a4),a3
  88.         cmp.w   #0,(a3)
  89.         beq.b   setwork ;was: .s
  90.         move.l  a4,a5
  91.         bra.b   linkup  ;was: .s
  92. setwork:
  93.  
  94.         move.l  #workar,$2c(a5)
  95.         move.l  shlsav,a5
  96.         jmp     (a5)
  97. ***
  98. * install (in super) vector
  99. doit:   move.l  $4fe,shlsav     ;move
  100.         move.l  #movenv,$4fe    ;move
  101.         rts                     ;and return
  102. ***
  103. *************************
  104.         .data
  105. msg1:           dc.b    $0d,$0a,' Environment Set V2',$0d,$0a,0
  106. envfstr:        dc.b    'ENVIRON.DAT',0
  107. handl:          dc.w    0
  108. shlsav:         dc.l    0
  109.         .bss
  110. workar:         ds.b    8192
  111.         .end
  112.